Volatilidad EWMA
----------------
Importar datos
~~~~~~~~~~~~~~
.. code:: r
datos = read.csv("Tres acciones.csv", sep=";", dec=",", header = T)
Matriz de precios
~~~~~~~~~~~~~~~~~
.. code:: r
precios = datos[,-1]
.. code:: r
nombres = colnames(precios)
nombres
.. raw:: html
- 'ECO'
- 'PFBCOLOM'
- 'ISA'
.. code:: r
acciones = ncol(precios)
acciones
.. raw:: html
3
.. code:: r
precios = ts(precios)
Matriz de rendimientos
~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
rendimientos = diff(log(precios))
Gráfico de los rendimientos
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
plot(rendimientos, main = "Rendimientos")
.. image:: output_11_0.png
:width: 420px
:height: 420px
Volatilidad de cada acción
~~~~~~~~~~~~~~~~~~~~~~~~~~
Esta forma de calcular la volatilidad también se llama **volatilidad
histórica**. Cada uno de los rendimientos tiene igual peso para la
volatilidad.
.. code:: r
volatilidades = apply(rendimientos, 2, sd)
print(volatilidades)
.. parsed-literal::
ECO PFBCOLOM ISA
0.01862871 0.01583774 0.01556859
Volatilidad EWMA
~~~~~~~~~~~~~~~~
**Varianza:**
.. math:: \sigma^2_t = \lambda \sigma^2_{t-1}+(1-\lambda)r^2_{t-1}
**Volatilidad EWMA:**
.. math:: \sigma_t = \sqrt{\lambda \sigma^2_{t-1}+(1-\lambda)r^2_{t-1}}
:math:`\sigma_t:` volatilidad en el período t.
:math:`\sigma^2_{t-1}:` varianza del período :math:`t - 1`.
:math:`r^2_{t-1}:` cuadrado de la rentabilidad del período
:math:`t - 1`.
:math:`\lambda:` Factor de decaimiento *(decay factor)*. Es una
constante y :math:`0 < \lambda < 1`. También llamada constante de
suavizado.
Lambda determina los pesos que se aplican a las observaciones y la
cantidad efectiva de datos que se utilizarán. Mientras más pequeño sea
lambda, mayor peso tienen los datos recientes.
.. figure:: FactorDecaimiento.jpg
:alt: 1
1
**Recomendaciones de J. P. Morgan: Riskmetrics**
- :math:`\lambda = 0,94` para rendimientos diarios.
- :math:`\lambda = 0,97` para rendimientos mensuales.
.. code:: r
numero_rendimientos = nrow(rendimientos)
numero_rendimientos
.. raw:: html
2815
Se utilizará lambda igual a 0.94. Este valor es recomendado para
frecuencias diarias.
.. code:: r
lambda = 0.94
Se calculará la volatilidad EWMA para cada período por cada acción. El
primer período tendra un valor igual a cero. Por tanto, en el segundo
ciclo ``for`` se empezará a partir de la segunda fila, porque en la
primera se especificará que será igual a cero.
.. code:: r
volatilidad_EWMA = matrix(, numero_rendimientos, acciones) # Matriz para calcular volatilidad EWMA para cada período por acción.
volatilidad_EWMA[1,] = 0 # La primera fila de la matriz anterior tendrá como valor semilla igual a cero.
for(j in 1:acciones){
for(i in 2:numero_rendimientos){
volatilidad_EWMA[i, j] = sqrt((1 - lambda)*rendimientos[i - 1, j]^2 + lambda*volatilidad_EWMA[i - 1, j]^2)
}
}
En el código anterior, debido a que la volatilidad EWMA es recursiva, la
volatilidad del período actual depende del rendimiento y de la
volatilidad EWMA del período anterior :math:`t - 1`. Por esto, se
utiliza ``[i - 1]`` para indicar que se utiliza el valor del período
anterior.
.. code:: r
print(head(volatilidad_EWMA))
print(tail(volatilidad_EWMA))
.. parsed-literal::
[,1] [,2] [,3]
[1,] 0.000000000 0.000000000 0.000000000
[2,] 0.004335493 0.006201571 0.006740513
[3,] 0.008140972 0.009685775 0.007133887
[4,] 0.009827886 0.009515765 0.009480782
[5,] 0.017128395 0.009307423 0.010199546
[6,] 0.017135220 0.012592325 0.014240597
[,1] [,2] [,3]
[2810,] 0.01467410 0.01202480 0.01661564
[2811,] 0.01431925 0.01191950 0.01623989
[2812,] 0.01393615 0.01239107 0.01587858
[2813,] 0.01356672 0.01277761 0.01549780
[2814,] 0.01315342 0.01238892 0.01627948
[2815,] 0.01285754 0.01204027 0.01749096
Volatilidad EWMA de cada acción
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
El último valor corresponde a la volatilidad EWMA de cada acción.
.. code:: r
vol_EWMA = tail(volatilidad_EWMA, 1)
print(vol_EWMA)
.. parsed-literal::
[,1] [,2] [,3]
[2815,] 0.01285754 0.01204027 0.01749096
.. code:: r
colnames(vol_EWMA) = nombres # se renombran las columnas con los nombres de las acciones.
print(vol_EWMA)
.. parsed-literal::
ECO PFBCOLOM ISA
[2815,] 0.01285754 0.01204027 0.01749096
**Volatilidad EWMA:**
- **ECO:** 1,29% diaria.
- **PFBCOLOM:** 1,20% diaria.
- **ISA:** 1,75% diaria.
Volatilidad histórica de cada acción
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anteriormente se habían calculado.
.. code:: r
print(volatilidades)
.. parsed-literal::
ECO PFBCOLOM ISA
0.01862871 0.01583774 0.01556859
**Volatilidad histórica:**
- **ECO:** 1,86% diaria.
- **PFBCOLOM:** 1,84% diaria.
- **ISA:** 1,56% diaria.
.. figure:: FiguraVolatilidadesEWMA.jpg
:alt: 2
2